<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //https://www.cnblogs.com/alimayun/p/10693358.html 位运算
        //如果一个整数不为0，那么这个整数至少有一位是1。如果我们把这个整数减1，那么原来处在整数最右边的1就会变为0，原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响；
        //例如： 一个二进制数1100， 从右边数起第三位是处于最右边的一个1。 减去1后， 第三位变成0， 它后面的两位0变成了1， 而前面的1保持不变， 因此得到的结果是1011；
        //我们再把原来的整数和减去1之后的结果做与运算， 从原来整数最右边一个1那一位开始所有位都会变成0。 如1100 & 1011 = 1000；
        //因此， 把一个整数减去1， 再和原整数做与运算， 会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1， 就将进行多少次这样的操作。
        // function NumberOf1(n) {
        //     var count = 0;
        //     while (n != 0) {
        //         count++;
        //         n = (n - 1) & n;
        //     }
        //     return count;
        // }
        // console.log(NumberOf1(17));

        //正则
        function zhuanHuan(n) {
            let res = n.toString(2);
            let arr = res.match(/1/g);
            console.log(arr);
            return arr.length;
        }
        console.log(zhuanHuan(17));
    </script>
</body>

</html>